package cl.tinet.reservaCD.sala;


import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import cl.tinet.reservaCD.modelo.Sala;

/**
 * 
 * Clase con el CRUD de las sala en la base de datos que implementa la
 * interface SalaDao.
 * 
 * @author Carlos Duque.
 */
public class SalaDaoImpl implements SalaDao {

    /**
     * Entity manager.
     */
    private EntityManager em;

    /**
     * Constructor que inicializa el manejador de entidad.
     * 
     * @param em
     *            entidad que se va a manejar.
     */
    public SalaDaoImpl(EntityManager em) {
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public void crearSala(Sala salaCrear) {
        em.persist(salaCrear);
    }

    /**
     * {@inheritDoc}
     */
    public void eliminarSala(Sala salaEliminar) {
        em.remove(salaEliminar);
    }

    /**
     * {@inheritDoc}
     */
    public void actualizarSala(Sala salaActualizar) {
        em.merge(salaActualizar);
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSala(Sala salaBusqueda) {

        Sala resultadaFinal = null;

        String sql = "SELECT s FROM Sala s WHERE nombresala =:Nombresala";
        Query consulta =
                em.createQuery(sql).setParameter("Nombresala",
                        salaBusqueda.getNombreSala());

        Sala resultado = (Sala) consulta.getSingleResult();
        resultadaFinal = resultado;

        return resultadaFinal;
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Sala> listaSala() {
        return (ArrayList<Sala>) em.createQuery("SELECT s FROM Sala s")
                .getResultList();
    }

}
